package com.example.sixtrainingdemo.presenter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

import androidx.annotation.NonNull;

import com.example.sixtrainingdemo.base.WeakRefHandler;
import com.example.sixtrainingdemo.contract.MainContract;
import com.example.sixtrainingdemo.entity.Goods;
import com.example.sixtrainingdemo.entity.Photo;

import java.util.ArrayList;
import java.util.List;

public class MainPresenter implements MainContract.IMainPresenter {

   private static final int WHAT_GET_GOODS_LIST = 0;
   private MainContract.IMainView mMainView;
   private Context mContext;

   public MainPresenter(MainContract.IMainView mainView, Context context) {
      mMainView = mainView;
      mContext = context;
   }

   @Override
   public void getGoodsList() {
      List<Goods> list = new ArrayList<>();
      new Thread(new Runnable() {
         @SuppressLint("Range")
         @Override
         public void run() {
            //此处异步进行数据查询
            //Uri uri = Uri.parse("content://com.example.sixtrainingdemo.provider/goods/1");
            Uri uri = Uri.parse("content://com.example.sixtrainingdemo.provider/goods");
            Cursor cursor = mContext.getContentResolver().query(
                    uri, null, null, null);
            try {
               if (cursor != null && cursor.moveToFirst()) {
                  do {
                     Goods goods = new Goods();
                     int goods_id = cursor.getInt(cursor.getColumnIndex("_id"));
                     goods.setId(cursor.getInt(cursor.getColumnIndex("_id")));
                     goods.setName(cursor.getString(cursor.getColumnIndex("goods_name")));
                     goods.setPrice(cursor.getDouble(cursor.getColumnIndex("goods_price")));
                     goods.setUnit(cursor.getString(cursor.getColumnIndex("goods_unit")));
                     goods.setBrowseCount(cursor.getInt(cursor.getColumnIndex("goods_browse")));
                     goods.setMessage(cursor.getString(cursor.getColumnIndex("goods_message")));

                     Uri photoUri = Uri.parse("content://com.example.sixtrainingdemo.provider/photo");
                     Cursor photoCursor = mContext.getContentResolver().query(
                             photoUri,
                             null,
                             "goods_id = ?",
                             new String[] {String.valueOf(goods_id)},
                             null);

                     if (photoCursor != null && photoCursor.moveToFirst()) {
                        do {
                           Photo photo = new Photo();
                           photo.setId(photoCursor.getInt(photoCursor.getColumnIndex("_id")));
                           photo.setData(photoCursor.getBlob(photoCursor.getColumnIndex("image")));
                           goods.addPhoto(photo);
                        } while (photoCursor.moveToNext());
                     }
                     Log.d("", "goods ====== " + goods.toString());

                     list.add(goods);
                  } while (cursor.moveToNext());
               }
            } finally {
               if (cursor != null) {
                  cursor.close();
               }
            }
//            Uri photoUri = Uri.parse("content://com.example.sixtrainingdemo.provider/photo");
//            Cursor photoCursor = mContext.getContentResolver().query(
//                    photoUri, null, null, null);
//            if (photoCursor != null && photoCursor.moveToFirst()) {
//               do {
//                  Log.d("", "photo_id = " + photoCursor.getInt(cursor.getColumnIndex("_id")));
//                  Log.d("", "photo_miage = " + photoCursor.getBlob(2));
//               } while (photoCursor.moveToNext());
//            }
            //子线程通过Handler发送消息，完成线程之间的通信。
            Message message = Message.obtain();
            message.obj = list;
            message.what = WHAT_GET_GOODS_LIST;
            mHandler.sendMessage(message);
         }
      }).start();
   }

   Handler mHandler = new WeakRefHandler<>(Looper.getMainLooper(), this, new Handler.Callback() {
      @Override
      public boolean handleMessage(@NonNull Message msg) {
         int what = msg.what;
         switch (what) {
            case WHAT_GET_GOODS_LIST:
               mMainView.showGoodsList((List<Goods>) msg.obj);
               break;
         }
         return false;
      }
   });
}
